package com.zhz.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhz.domain.User;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zhz.dto.UserDto;
import com.zhz.model.*;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * @author ：zhz
 * @date ：Created in 2021/01/02
 * @version: V1.0
 * @slogan: 天下风云出我辈，一入代码岁月催
 * @description:
 **/
public interface UserService extends IService<User> {


    /**
     * 条件查询会员信息
     *
     * @param page     分页信息
     * @param mobile   手机号
     * @param userId   会员id
     * @param userName 会员名称
     * @param realName 会员真实姓名
     * @param status   会员状态
     * @return
     */
    Page<User> findByPage(Page<User> page, String mobile, Long userId, String userName, String realName, Integer status, Integer reviewsStatus);

    /**
     * 通过用户的 Id 查询该用户邀请的人员
     *
     * @param page   分页信息
     * @param userId 用户的id
     * @return
     */
    Page<User> findDirectInvitePage(Page<User> page, Long userId);

    /**
     * 修改用户的审核状态
     *
     * @param id         用户id
     * @param authStatus 用户审核状态
     * @param authCode   用户审核唯一code
     * @param remark     备注
     */
    void updateUserAuthStatus(Long id, Byte authStatus, Long authCode, String remark);

    /**
     * 用户实名认证
     *
     * @param id           用户的id
     * @param userAuthForm 认证的数据
     * @return
     */
    boolean identifyVerify(Long id, UserAuthForm userAuthForm);

    /**
     * 用户 的高级认证
     *
     * @param id   用户的id
     * @param imgs 用户上传的图片地址
     */
    void authUser(long id, List<String> imgs);

    /**
     * 修改用户的手机号码
     *
     * @param userId           用户的id
     * @param updatePhoneParam 修改用户的参数
     * @return
     */
    boolean updatePhone(Long userId, UpdatePhoneParam updatePhoneParam);

    /**
     * 检查新的号码是否可用，若可用，则给该新手机号码发送验证码
     *
     * @param mobile      新的手机号码
     * @param countryCode 国家代码
     * @return
     */
    boolean checkNewPhone(String mobile, String countryCode);

    /**
     * 修改密码
     *
     * @param userId           要修改密码的用户
     * @param updateLoginParam 修改密码的参数
     * @return
     */
    boolean updateLoginPassword(Long userId, UpdateLoginParam updateLoginParam);

    /**
     * 修改交易密码
     *
     * @param userId           用户的id
     * @param updateLoginParam 修改交易密码的参数
     * @return
     */
    boolean updatePayPassword(Long userId, UpdateLoginParam updateLoginParam);

    /**
     * 重置支付密码
     *
     * @param userId                用户id
     * @param unsetPayPasswordParam 重置密码的表单参数
     * @return
     */
    boolean unsetPayPassword(Long userId, UnsetPayPasswordParam unsetPayPasswordParam);

    /**
     * 获取该用户邀请的用户列表
     *
     * @param userId 用户的Id
     * @return
     */
    List<User> getUserInvites(Long userId);

    /**
     * 通过用户的信息查询用户
     *
     * @param ids      用户的批量查询,用在我们给别人远程调用时批量获取用户的数据
     * @param userName 使用用户名查询一系列用户的记录
     * @param mobile   使用用户手机查询一系列用户的记录
     * @return
     */
   Map<Long, UserDto> getBasicUsers(List<Long> ids, String userName, String mobile);

    /**
     * 用户的注册
     *
     * @param registerParam 注册的表单参数
     * @return
     */
    boolean register(RegisterParam registerParam);


    /**
     * 重置登陆密码
     *
     * @param unSetPasswordParam
     * @return
     */
    public boolean unsetLoginPwd(UnSetPasswordParam unSetPasswordParam);


}
